LIN总线介绍

LIN(Local Interconnect Network)总线是基于UART/SCI(通用异步收发器/串行接口)的低成本串行通讯协议。其目标定位于车身网络模块节点间的低端通信,主要用于智能传感器和执行器的串行通信,而这正是CAN总线的带宽和功能所不要求的部分。

做为一个对CAN总线作为低成本辅助总线,LIN总线在车身控制中应用广泛,车门、车窗、车灯以及中控锁等都使用LIN线。

LIN线与CAN最大的区别

一,单线通信,传输速率较低

LIN线在物理上是一个上拉到12V的集电极开漏总线,多个节点可以并联到同一根线上,与IIC的SDA类似,但其没有独立的时钟线,靠通信双方约定的波特率进行通信,与UART类似,但由于UART之处在于,其可以通过同步场进行时钟同步,使传输变得更可靠。这样与CAN总线的一对差分双绞线不同,其抗干扰能力大大减弱,通信速率最高只能20Kbps,而CAN可达1Mbps。

二,主从结构,中心化拓扑。

LIN线拓扑结构是主从结构的星型模型,所有传输都是master发起,slave不可以主动发起请求。这个其实与modbus更类似。也可以把slave看做消息的发布者,master看成消息的订阅者,想要获取某个变量值,就需要不断轮询读应节点对应的报文。这个结构就决定了LIN线传输的消息不可能太多,以保证消息更新的实时性,通常一条LIN线上定义的消息要比一条CAN线上定义的消息少一个数量级。当然,如果中心节点出现了问题,整个网络也就挂掉了。

三,更轻量级的处理协议栈。

在汽车电子开发中,CAN总线协议栈占有相当大的代码量,包括CAN 驱动层、TP、NM、UDS、router、bootloader等等,但LIN开发量也会少一个数量级,包括驱动、调度表,简单的睡眠唤醒,简单的TP等,其上层的服务还是要转成CAN的信号进行传输。

拓扑结构

LIN 的拓扑结构为单线总线,应用了单一主机多从机的概念。总线电平为
12V,传输位速率(Bitrate)最高为20kbps。由于物理层限制,一个LIN网络最多可以连接16个节点,典型应用一般都在12个节点以下,主机节点有且只有一个,从机节点有1到15个。主机节点(Master Node)包含主机任务(Master Task)和从机任务(Slave Task),从机节点(Slave Node)只包含从机任务,如下图所示:

主机任务负责:
(1) 调度总线上帧的传输次序;
(2) 监测数据,处理错误;
(3) 作为标准时钟参考;
(4) 接收从机节点发出的总线唤醒命令。

从机任务不能够主动发送数据,需要接收主机发送的帧头(帧的起始部分,参照3.1节的图3.1),根据帧头所包含的信息(这里指帧ID,详细内容参照3.1.3节)判断:

(1) 发送应答(帧中除帧头外剩下的部分,参照3.1节的图3.1);
(2) 接收应答;
(3) 既不接收也不发送应答。

LIN的特点

(1)网络由一个主节点与若干个从节点构成。

(2)使用LIN总线可以大幅度削减成本。

(3)传输具有确定性,传播时间可以提前计算

(4)LIN具有可预测的EMC(电磁兼容性)性能,为了限制EMC的强度,LIN协议规定最大传输速率为20kbps。

(5)LIN总线提供信号的配置、处理、识别和诊断功能。

LIN总线数据帧格式

一个典型的LIN数据帧主要包含header、header response以及response域。LIN一帧数据最大可以传8bytes,比较有意思的一点是,LIN2.x规定可以传输的LIN字节数可选是2,4,8并不是1-8内任意一个数字。一般而言,车内会选择一个统一字节数,最常用比如每帧都传8个字节。

Header场中包含break,synch以及受保护的id。其实break就是告诉总线传输开始,然后用synch同步始终,然后使用受保护id来寻址,如果有LIN slave节点可以提供这个id的服务,那在master发出protected id后,就他就会插入一个应答,与IIC从机在sda上给出类似应答类似。值得注意的是,这个protected id并不是slave从机地址,而是想要订阅的报文id,换个说法,一个slave从机可以提供多个报文id的服务,比如一个车灯控制ECU,可以提供灯控制、状态、故障码、软硬件版本信息等多个LIN ID服务。而slave从机地址是隐性的与其所提供的报文ID是有个对应关系的。

与CAN总线的CRC校验不同,LIN的提供奇偶校验以及checksum方式,对header中的protected id进行奇偶校验,也会对data进行checksum校验,有classic以及enhanced区分。

LIN总线传输调度

LIN总线的主从结构决定了master节点要周期性的去slave读取数据,也可以去设置一个报文。一条LIN总线上有多个slave节点,每个slave要发布多个ID报文时,就需要master在兼顾实时行的条件下,顺序的读取或这设置每个slave的每个ID报文。对于每个slave可以提供哪些报文,有ldf文件统一描述,与CAN的dbc文件不同。Ldf文件全称为LIN Configuration Description File,描述了一条LIN bus完整的主从节点信息,以及报文格式,调度信息。根据ldf文件可以得到schedule tables,这个调度表给master设置了读取slave节点报文id的时间间隔,比如10ms,100ms。这个调度表可以由专门的生成工具由ldf文件来生成。

LIN总线诊断

在整个汽车网络中,目前最复杂的就是CAN诊断部分,LIN诊断可以说只是一个补充,LIN支持使用0x3C(master request frame)以及0x3D(slave response frame)两个报文进行对LIN slave的诊断,其帧格式(报文内8 bytes的数据)如下所示:
https://blog.csdn.net/DanielLee_ustb/article/details/79143161

其中NAD为address of the slave node,表明是要诊断哪一个ECU; PCI为Protocol Control Information,表明该报文代表是一个什么样的诊断保文; SID 为Service Identifier,表明该报文对应的服务是什么;其他为数据长度以及数据分片。

LIN总线的诊断与CAN诊断各个服务保持一致,但不需要支持那么多服务,一般而言只需要支持比如通信控制、读取DID、读取DTC等服务即可,少数可以进行固件升级的LIN ECU还需要支持安全访问、程序下载、复位等服务。

LIN总线开发内容

(1)EE拓扑规划以及ldf文件的定义;
(2)根据ldf文件由专门的工具生成schedule tables,以及信号层;
(3)开发或集成LIN driver、LIN TP;
(4)开发相关LIN发送以及接收task,轮询各节点报文;
(5)接收上层控制信号对slave进行设置,接受slave信号的变化反馈给上层应用;
(6)对于诊断部分的处理;
(7)错误处理;
(8)LIN睡眠和唤醒的控制。